home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / BibTeX / BibTeX inputs / unsrtnat.bst < prev    next >
Text File  |  1996-08-20  |  25KB  |  1,302 lines

  1. %% 
  2. %% This is file `unsrtnat.bst', generated 
  3. %% on <1995/12/7> with the docstrip utility (2.2i).
  4. %% 
  5. %% The original source files were:
  6. %% 
  7. %% natbst.mbs  (with options: `name-full,atit-lower,month-full,jour-full')
  8. %% ---------------------------------------- 
  9. %% *** Version of `unsrt.bst' for use with natbib package *** 
  10. %% 
  11.  % The original source file contains the following version information:
  12.  % \ProvidesFile{natbst.mbs}[1995/09/05 1.0 (PWD)]
  13.  
  14.  %% BibTeX `plainnat' family
  15.  %%   version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
  16.  %%
  17.  %% For use with the `natbib.sty' package; emulates the corresponding
  18.  %%   member of the `plain' family, but with author-year citations.
  19.  %%
  20.  %% With version 6.0 of `natbib.sty', it may also be used for numerical
  21.  %%   citations, while retaining the commands \citeauthor, \citefullauthor,
  22.  %%   and \citeyear to print the corresponding information.
  23.  %%
  24. ENTRY
  25.   { address
  26.     author
  27.     booktitle
  28.     chapter
  29.     edition
  30.     editor
  31.     howpublished
  32.     institution
  33.     journal
  34.     key
  35.     month
  36.     note
  37.     number
  38.     organization
  39.     pages
  40.     publisher
  41.     school
  42.     series
  43.     title
  44.     type
  45.     volume
  46.     year
  47.   }
  48.   {}
  49.   { label extra.label sort.label short.list seq.label }
  50.  
  51. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  52.  
  53. FUNCTION {init.state.consts}
  54. { #0 'before.all :=
  55.   #1 'mid.sentence :=
  56.   #2 'after.sentence :=
  57.   #3 'after.block :=
  58. }
  59.  
  60. STRINGS { s t }
  61.  
  62. F%% 
  63. %% This is file `unsrtnat.bst', generated 
  64. %% on <1995/12/7> with the docstrip utility (2.2i).
  65. %% 
  66. %% The original source files were:
  67. %% 
  68. %% natbst.mbs  (with options: `name-full,atit-lower,month-full,jour-full')
  69. %% ---------------------------------------- 
  70. %% *** Version of `unsrt.bst' for use with natbib package *** 
  71. %% 
  72.  % The original source file contains the following version information:
  73.  % \ProvidesFile{natbst.mbs}[1995/09/05 1.0 (PWD)]
  74.  
  75.  %% BibTeX `plainnat' family
  76.  %%   version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
  77.  %%
  78.  %% For use with the `natbib.sty' package; emulates the corresponding
  79.  %%   member of the `plain' family, but with author-year citations.
  80.  %%
  81.  %% With version 6.0 of `natbib.sty', it may also be used for numerical
  82.  %%   citations, while retaining the commands \citeauthor, \citefullauthor,
  83.  %%   and \citeyear to print the corresponding information.
  84.  %%
  85. ENTRY
  86.   { address
  87.     author
  88.     booktitle
  89.     chapter
  90.     edition
  91.     editor
  92.     howpublished
  93.     institution
  94.     journal
  95.     key
  96.     month
  97.     note
  98.     number
  99.     organization
  100.     pages
  101.     publisher
  102.     school
  103.     series
  104.     title
  105.     type
  106.     volume
  107.     year
  108.   }
  109.   {}
  110.   { label extra.label sort.label short.list seq.label }
  111.  
  112. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  113.  
  114. FUNCTION {init.state.consts}
  115. { #0 'before.all :=
  116.   #1 'mid.sentence :=
  117.   #2 'after.sentence :=
  118.   #3 'after.block :=
  119. }
  120.  
  121. STRINGS { s t }
  122.  
  123. F{ duplicate$ empty$
  124.     { pop$ "" }
  125.     'skip$
  126.   if$
  127. }
  128.  
  129. FUNCTION {emphasize}
  130. { duplicate$ empty$
  131.     { pop$ "" }
  132.     { "{\em " swap$ * "}" * }
  133.   if$
  134. }
  135.  
  136. INTEGERS { nameptr namesleft numnames }
  137.  
  138. FUNCTION {format.names}
  139. { 's :=
  140.   #1 'nameptr :=
  141.   s num.names$ 'numnames :=
  142.   numnames 'namesleft :=
  143.     { namesleft #0 > }
  144.     { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
  145.       nameptr #1 >
  146.         { namesleft #1 >
  147.             { ", " * t * }
  148.             { numnames #2 >
  149.                 { "," * }
  150.                 'skip$
  151.               if$
  152.               t "others" =
  153.                 { " et~al." * }
  154.                 { " and " * t * }
  155.               if$
  156.             }
  157.           if$
  158.         }
  159.         't
  160.       if$
  161.       nameptr #1 + 'nameptr :=
  162.       namesleft #1 - 'namesleft :=
  163.     }
  164.   while$
  165. }
  166.  
  167. FUNCTION {format.authors}
  168. { author empty$
  169.     { "" }
  170.     { author format.names }
  171.   if$
  172. }
  173.  
  174. FUNCTION {format.editors}
  175. { editor empty$
  176.     { "" }
  177.     { editor format.names
  178.       editor num.names$ #1 >
  179.         { ", editors" * }
  180.         { ", editor" * }
  181.       if$
  182.     }
  183.   if$
  184. }
  185.  
  186. FUNCTION {format.title}
  187. { title empty$
  188.     { "" }
  189.     { title "t" change.case$ }
  190.   if$
  191. }
  192.  
  193. FUNCTION {format.full.names}
  194. {'s :=
  195.   #1 'nameptr :=
  196.   s num.names$ 'numnames :=
  197.   numnames 'namesleft :=
  198.     { namesleft #0 > }
  199.     { s nameptr
  200.       "{vv~}{ll}" format.name$ 't :=
  201.       nameptr #1 >
  202.         {
  203.           namesleft #1 >
  204.             { ", " * t * }
  205.             {
  206.               numnames #2 >
  207.                 { "," * }
  208.                 'skip$
  209.               if$
  210.               t "others" =
  211.                 { " et~al." * }
  212.                 { " and " * t * }
  213.               if$
  214.             }
  215.           if$
  216.         }
  217.         't
  218.       if$
  219.       nameptr #1 + 'nameptr :=
  220.       namesleft #1 - 'namesleft :=
  221.     }
  222.   while$
  223. }
  224.  
  225. FUNCTION {author.editor.key.full}
  226. { author empty$
  227.     { editor empty$
  228.         { key empty$
  229.             { cite$ #1 #3 substring$ }
  230.             'key
  231.           if$
  232.         }
  233.         { editor format.full.names }
  234.       if$
  235.     }
  236.     { author format.full.names }
  237.   if$
  238. }
  239.  
  240. FUNCTION {author.key.full}
  241. { author empty$
  242.     { key empty$
  243.          { cite$ #1 #3 substring$ }
  244.           'key
  245.       if$
  246.     }
  247.     { author format.full.names }
  248.   if$
  249. }
  250.  
  251. FUNCTION {editor.key.full}
  252. { editor empty$
  253.     { key empty$
  254.          { cite$ #1 #3 substring$ }
  255.           'key
  256.       if$
  257.     }
  258.     { editor format.full.names }
  259.   if$
  260. }
  261.  
  262. FUNCTION {make.full.names}
  263. { type$ "book" =
  264.   type$ "inbook" =
  265.   or
  266.     'author.editor.key.full
  267.     { type$ "proceedings" =
  268.         'editor.key.full
  269.         'author.key.full
  270.       if$
  271.     }
  272.   if$
  273. }
  274.  
  275. FUNCTION {output.bibitem}
  276. { newline$
  277.   "\bibitem[" write$
  278.   label write$
  279.   ")" make.full.names duplicate$ short.list =
  280.      { pop$ }
  281.      { * }
  282.    if$
  283.   "]{" * write$
  284.   cite$ write$
  285.   "}" write$
  286.   newline$
  287.   ""
  288.   before.all 'output.state :=
  289. }
  290.  
  291. FUNCTION {n.dashify}
  292. { 't :=
  293.   ""
  294.     { t empty$ not }
  295.     { t #1 #1 substring$ "-" =
  296.         { t #1 #2 substring$ "--" = not
  297.             { "--" *
  298.               t #2 global.max$ substring$ 't :=
  299.             }
  300.             {   { t #1 #1 substring$ "-" = }
  301.                 { "-" *
  302.                   t #2 global.max$ substring$ 't :=
  303.                 }
  304.               while$
  305.             }
  306.           if$
  307.         }
  308.         { t #1 #1 substring$ *
  309.           t #2 global.max$ substring$ 't :=
  310.         }
  311.       if$
  312.     }
  313.   while$
  314. }
  315.  
  316. FUNCTION {format.date}
  317. { year duplicate$ empty$
  318.     { "empty year in " cite$ * "; set to ????" * warning$
  319.        pop$ "????" }
  320.     'skip$
  321.   if$
  322.   extra.label *
  323. }
  324.  
  325. FUNCTION {format.btitle}
  326. { title emphasize
  327. }
  328.  
  329. FUNCTION {tie.or.space.connect}
  330. { duplicate$ text.length$ #3 <
  331.     { "~" }
  332.     { " " }
  333.   if$
  334.   swap$ * *
  335. }
  336.  
  337. FUNCTION {either.or.check}
  338. { empty$
  339.     'pop$
  340.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  341.   if$
  342. }
  343.  
  344. FUNCTION {format.bvolume}
  345. { volume empty$
  346.     { "" }
  347.     { "volume" volume tie.or.space.connect
  348.       series empty$
  349.         'skip$
  350.         { " of " * series emphasize * }
  351.       if$
  352.       "volume and number" number either.or.check
  353.     }
  354.   if$
  355. }
  356.  
  357. FUNCTION {format.number.series}
  358. { volume empty$
  359.     { number empty$
  360.         { series field.or.null }
  361.         { output.state mid.sentence =
  362.             { "number" }
  363.             { "Number" }
  364.           if$
  365.           number tie.or.space.connect
  366.           series empty$
  367.             { "there's a number but no series in " cite$ * warning$ }
  368.             { " in " * series * }
  369.           if$
  370.         }
  371.       if$
  372.     }
  373.     { "" }
  374.   if$
  375. }
  376.  
  377. FUNCTION {format.edition}
  378. { edition empty$
  379.     { "" }
  380.     { output.state mid.sentence =
  381.         { edition "l" change.case$ " edition" * }
  382.         { edition "t" change.case$ " edition" * }
  383.       if$
  384.     }
  385.   if$
  386. }
  387.  
  388. INTEGERS { multiresult }
  389.  
  390. FUNCTION {multi.page.check}
  391. { 't :=
  392.   #0 'multiresult :=
  393.     { multiresult not
  394.       t empty$ not
  395.       and
  396.     }
  397.     { t #1 #1 substring$
  398.       duplicate$ "-" =
  399.       swap$ duplicate$ "," =
  400.       swap$ "+" =
  401.       or or
  402.         { #1 'multiresult := }
  403.         { t #2 global.max$ substring$ 't := }
  404.       if$
  405.     }
  406.   while$
  407.   multiresult
  408. }
  409.  
  410. FUNCTION {format.pages}
  411. { pages empty$
  412.     { "" }
  413.     { pages multi.page.check
  414.         { "pages" pages n.dashify tie.or.space.connect }
  415.         { "page" pages tie.or.space.connect }
  416.       if$
  417.     }
  418.   if$
  419. }
  420.  
  421. FUNCTION {format.vol.num.pages}
  422. { volume field.or.null
  423.   number empty$
  424.     'skip$
  425.     { "\penalty0 (" number * ")" * *
  426.       volume empty$
  427.         { "there's a number but no volume in " cite$ * warning$ }
  428.         'skip$
  429.       if$
  430.     }
  431.   if$
  432.   pages empty$
  433.     'skip$
  434.     { duplicate$ empty$
  435.         { pop$ format.pages }
  436.         { ":\penalty0 " * pages n.dashify * }
  437.       if$
  438.     }
  439.   if$
  440. }
  441.  
  442. FUNCTION {format.chapter.pages}
  443. { chapter empty$
  444.     'format.pages
  445.     { type empty$
  446.         { "chapter" }
  447.         { type "l" change.case$ }
  448.       if$
  449.       chapter tie.or.space.connect
  450.       pages empty$
  451.         'skip$
  452.         { ", " * format.pages * }
  453.       if$
  454.     }
  455.   if$
  456. }
  457.  
  458. FUNCTION {format.in.ed.booktitle}
  459. { booktitle empty$
  460.     { "" }
  461.     { editor empty$
  462.         { "In " booktitle emphasize * }
  463.         { "In " format.editors * ", " * booktitle emphasize * }
  464.       if$
  465.     }
  466.   if$
  467. }
  468.  
  469. FUNCTION {empty.misc.check}
  470. { author empty$ title empty$ howpublished empty$
  471.   month empty$ year empty$ note empty$
  472.   and and and and and
  473.   key empty$ not and
  474.     { "all relevant fields are empty in " cite$ * warning$ }
  475.     'skip$
  476.   if$
  477. }
  478.  
  479. FUNCTION {format.thesis.type}
  480. { type empty$
  481.     'skip$
  482.     { pop$
  483.       type "t" change.case$
  484.     }
  485.   if$
  486. }
  487.  
  488. FUNCTION {format.tr.number}
  489. { type empty$
  490.     { "Technical Report" }
  491.     'type
  492.   if$
  493.   number empty$
  494.     { "t" change.case$ }
  495.     { number tie.or.space.connect }
  496.   if$
  497. }
  498.  
  499. FUNCTION {format.article.crossref}
  500. { key empty$
  501.     { journal empty$
  502.         { "need key or journal for " cite$ * " to crossref " * crossref *
  503.           warning$
  504.           ""
  505.         }
  506.         { "In {\em " journal * "\/}" * }
  507.       if$
  508.     }
  509.     { "In " key * }
  510.   if$
  511.   " \cite{" * crossref * "}" *
  512. }
  513.  
  514. FUNCTION {format.crossref.editor}
  515. { editor #1 "{vv~}{ll}" format.name$
  516.   editor num.names$ duplicate$
  517.   #2 >
  518.     { pop$ " et~al." * }
  519.     { #2 <
  520.         'skip$
  521.         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  522.             { " et~al." * }
  523.             { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  524.           if$
  525.         }
  526.       if$
  527.     }
  528.   if$
  529. }
  530.  
  531. FUNCTION {format.book.crossref}
  532. { volume empty$
  533.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  534.       "In "
  535.     }
  536.     { "Volume" volume tie.or.space.connect
  537.       " of " *
  538.     }
  539.   if$
  540.   editor empty$
  541.   editor field.or.null author field.or.null =
  542.   or
  543.     { key empty$
  544.         { series empty$
  545.             { "need editor, key, or series for " cite$ * " to crossref " *
  546.               crossref * warning$
  547.               "" *
  548.             }
  549.             { "{\em " * series * "\/}" * }
  550.           if$
  551.         }
  552.         { key * }
  553.       if$
  554.     }
  555.     { format.crossref.editor * }
  556.   if$
  557.   " \cite{" * crossref * "}" *
  558. }
  559.  
  560. FUNCTION {format.incoll.inproc.crossref}
  561. { editor empty$
  562.   editor field.or.null author field.or.null =
  563.   or
  564.     { key empty$
  565.         { booktitle empty$
  566.             { "need editor, key, or booktitle for " cite$ * " to crossref " *
  567.               crossref * warning$
  568.               ""
  569.             }
  570.             { "In {\em " booktitle * "\/}" * }
  571.           if$
  572.         }
  573.         { "In " key * }
  574.       if$
  575.     }
  576.     { "In " format.crossref.editor * }
  577.   if$
  578.   " \cite{" * crossref * "}" *
  579. }
  580.  
  581. FUNCTION {article}
  582. { output.bibitem
  583.   format.authors "author" output.check
  584.   new.block
  585.   format.title "title" output.check
  586.   new.block
  587.   crossref missing$
  588.     { journal emphasize "journal" output.check
  589.       format.vol.num.pages output
  590.       format.date "year" output.check
  591.     }
  592.     { format.article.crossref output.nonnull
  593.       format.pages output
  594.     }
  595.   if$
  596.   new.block
  597.   note output
  598.   fin.entry
  599. }
  600.  
  601. FUNCTION {book}
  602. { output.bibitem
  603.   author empty$
  604.     { format.editors "author and editor" output.check }
  605.     { format.authors output.nonnull
  606.       crossref missing$
  607.         { "author and editor" editor either.or.check }
  608.         'skip$
  609.       if$
  610.     }
  611.   if$
  612.   new.block
  613.   format.btitle "title" output.check
  614.   crossref missing$
  615.     { format.bvolume output
  616.       new.block
  617.       format.number.series output
  618.       new.sentence
  619.       publisher "publisher" output.check
  620.       address output
  621.     }
  622.     { new.block
  623.       format.book.crossref output.nonnull
  624.     }
  625.   if$
  626.   format.edition output
  627.   format.date "year" output.check
  628.   new.block
  629.   note output
  630.   fin.entry
  631. }
  632.  
  633. FUNCTION {booklet}
  634. { output.bibitem
  635.   format.authors output
  636.   new.block
  637.   format.title "title" output.check
  638.   howpublished address new.block.checkb
  639.   howpublished output
  640.   address output
  641.   format.date output
  642.   new.block
  643.   note output
  644.   fin.entry
  645. }
  646.  
  647. FUNCTION {inbook}
  648. { output.bibitem
  649.   author empty$
  650.     { format.editors "author and editor" output.check }
  651.     { format.authors output.nonnull
  652.       crossref missing$
  653.         { "author and editor" editor either.or.check }
  654.         'skip$
  655.       if$
  656.     }
  657.   if$
  658.   new.block
  659.   format.btitle "title" output.check
  660.   crossref missing$
  661.     { format.bvolume output
  662.       format.chapter.pages "chapter and pages" output.check
  663.       new.block
  664.       format.number.series output
  665.       new.sentence
  666.       publisher "publisher" output.check
  667.       address output
  668.     }
  669.     { format.chapter.pages "chapter and pages" output.check
  670.       new.block
  671.       format.book.crossref output.nonnull
  672.     }
  673.   if$
  674.   format.edition output
  675.   format.date "year" output.check
  676.   new.block
  677.   note output
  678.   fin.entry
  679. }
  680.  
  681. FUNCTION {incollection}
  682. { output.bibitem
  683.   format.authors "author" output.check
  684.   new.block
  685.   format.title "title" output.check
  686.   new.block
  687.   crossref missing$
  688.     { format.in.ed.booktitle "booktitle" output.check
  689.       format.bvolume output
  690.       format.number.series output
  691.       format.chapter.pages output
  692.       new.sentence
  693.       publisher "publisher" output.check
  694.       address output
  695.       format.edition output
  696.       format.date "year" output.check
  697.     }
  698.     { format.incoll.inproc.crossref output.nonnull
  699.       format.chapter.pages output
  700.     }
  701.   if$
  702.   new.block
  703.   note output
  704.   fin.entry
  705. }
  706.  
  707. FUNCTION {inproceedings}
  708. { output.bibitem
  709.   format.authors "author" output.check
  710.   new.block
  711.   format.title "title" output.check
  712.   new.block
  713.   crossref missing$
  714.     { format.in.ed.booktitle "booktitle" output.check
  715.       format.bvolume output
  716.       format.number.series output
  717.       format.pages output
  718.       address empty$
  719.         { organization publisher new.sentence.checkb
  720.           organization output
  721.           publisher output
  722.           format.date "year" output.check
  723.         }
  724.         { address output.nonnull
  725.           format.date "year" output.check
  726.           new.sentence
  727.           organization output
  728.           publisher output
  729.         }
  730.       if$
  731.     }
  732.     { format.incoll.inproc.crossref output.nonnull
  733.       format.pages output
  734.     }
  735.   if$
  736.   new.block
  737.   note output
  738.   fin.entry
  739. }
  740.  
  741. FUNCTION {conference} { inproceedings }
  742.  
  743. FUNCTION {manual}
  744. { output.bibitem
  745.   author empty$
  746.     { organization empty$
  747.         'skip$
  748.         { organization output.nonnull
  749.           address output
  750.         }
  751.       if$
  752.     }
  753.     { format.authors output.nonnull }
  754.   if$
  755.   new.block
  756.   format.btitle "title" output.check
  757.   author empty$
  758.     { organization empty$
  759.         { address new.block.checka
  760.           address output
  761.         }
  762.         'skip$
  763.       if$
  764.     }
  765.     { organization address new.block.checkb
  766.       organization output
  767.       address output
  768.     }
  769.   if$
  770.   format.edition output
  771.   format.date output
  772.   new.block
  773.   note output
  774.   fin.entry
  775. }
  776. FUNCTION {mastersthesis}
  777. { output.bibitem
  778.   format.authors "author" output.check
  779.   new.block
  780.   format.title "title" output.check
  781.   new.block
  782.   "Master's thesis" format.thesis.type output.nonnull
  783.   school "school" output.check
  784.   address output
  785.   format.date "year" output.check
  786.   new.block
  787.   note output
  788.   fin.entry
  789. }
  790.  
  791. FUNCTION {misc}
  792. { output.bibitem
  793.   format.authors output
  794.   title howpublished new.block.checkb
  795.   format.title output
  796.   howpublished new.block.checka
  797.   howpublished output
  798.   format.date output
  799.   new.block
  800.   note output
  801.   fin.entry
  802.   empty.misc.check
  803. }
  804.  
  805. FUNCTION {phdthesis}
  806. { output.bibitem
  807.   format.authors "author" output.check
  808.   new.block
  809.   format.btitle "title" output.check
  810.   new.block
  811.   "PhD thesis" format.thesis.type output.nonnull
  812.   school "school" output.check
  813.   address output
  814.   format.date "year" output.check
  815.   new.block
  816.   note output
  817.   fin.entry
  818. }
  819.  
  820. FUNCTION {proceedings}
  821. { output.bibitem
  822.   editor empty$
  823.     { organization output }
  824.     { format.editors output.nonnull }
  825.   if$
  826.   new.block
  827.   format.btitle "title" output.check
  828.   format.bvolume output
  829.   format.number.series output
  830.   address empty$
  831.     { editor empty$
  832.         { publisher new.sentence.checka }
  833.         { organization publisher new.sentence.checkb
  834.           organization output
  835.         }
  836.       if$
  837.       publisher output
  838.       format.date "year" output.check
  839.     }
  840.     { address output.nonnull
  841.       format.date "year" output.check
  842.       new.sentence
  843.       editor empty$
  844.         'skip$
  845.         { organization output }
  846.       if$
  847.       publisher output
  848.     }
  849.   if$
  850.   new.block
  851.   note output
  852.   fin.entry
  853. }
  854.  
  855. FUNCTION {techreport}
  856. { output.bibitem
  857.   format.authors "author" output.check
  858.   new.block
  859.   format.title "title" output.check
  860.   new.block
  861.   format.tr.number output.nonnull
  862.   institution "institution" output.check
  863.   address output
  864.   format.date "year" output.check
  865.   new.block
  866.   note output
  867.   fin.entry
  868. }
  869.  
  870. FUNCTION {unpublished}
  871. { output.bibitem
  872.   format.authors "author" output.check
  873.   new.block
  874.   format.title "title" output.check
  875.   new.block
  876.   note "note" output.check
  877.   format.date output
  878.   fin.entry
  879. }
  880.  
  881. FUNCTION {default.type} { misc }
  882.  
  883.  
  884. MACRO {jan} {"January"}
  885.  
  886. MACRO {feb} {"February"}
  887.  
  888. MACRO {mar} {"March"}
  889.  
  890. MACRO {apr} {"April"}
  891.  
  892. MACRO {may} {"May"}
  893.  
  894. MACRO {jun} {"June"}
  895.  
  896. MACRO {jul} {"July"}
  897.  
  898. MACRO {aug} {"August"}
  899.  
  900. MACRO {sep} {"September"}
  901.  
  902. MACRO {oct} {"October"}
  903.  
  904. MACRO {nov} {"November"}
  905.  
  906. MACRO {dec} {"December"}
  907.  
  908.  
  909.  
  910. MACRO {acmcs} {"ACM Computing Surveys"}
  911.  
  912. MACRO {acta} {"Acta Informatica"}
  913.  
  914. MACRO {cacm} {"Communications of the ACM"}
  915.  
  916. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  917.  
  918. MACRO {ibmsj} {"IBM Systems Journal"}
  919.  
  920. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  921.  
  922. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  923.  
  924. MACRO {ieeetcad}
  925.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  926.  
  927. MACRO {ipl} {"Information Processing Letters"}
  928.  
  929. MACRO {jacm} {"Journal of the ACM"}
  930.  
  931. MACRO {jcss} {"Journal of Computer and System Sciences"}
  932.  
  933. MACRO {scp} {"Science of Computer Programming"}
  934.  
  935. MACRO {sicomp} {"SIAM Journal on Computing"}
  936.  
  937. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  938.  
  939. MACRO {tods} {"ACM Transactions on Database Systems"}
  940.  
  941. MACRO {tog} {"ACM Transactions on Graphics"}
  942.  
  943. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  944.  
  945. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  946.  
  947. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  948.  
  949. MACRO {tcs} {"Theoretical Computer Science"}
  950.  
  951.  
  952. READ
  953.  
  954. FUNCTION {sortify}
  955. { purify$
  956.   "l" change.case$
  957. }
  958.  
  959. INTEGERS { len }
  960.  
  961. FUNCTION {chop.word}
  962. { 's :=
  963.   'len :=
  964.   s #1 len substring$ =
  965.     { s len #1 + global.max$ substring$ }
  966.     's
  967.   if$
  968. }
  969.  
  970. FUNCTION {format.lab.names}
  971. { 's :=
  972.   s #1 "{vv~}{ll}" format.name$
  973.   s num.names$ duplicate$
  974.   #2 >
  975.     { pop$ " et~al." * }
  976.     { #2 <
  977.         'skip$
  978.         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  979.             { " et~al." * }
  980.             { " and " * s #2 "{vv~}{ll}" format.name$ * }
  981.           if$
  982.         }
  983.       if$
  984.     }
  985.   if$
  986. }
  987.  
  988. FUNCTION {author.key.label}
  989. { author empty$
  990.     { key empty$
  991.         { cite$ #1 #3 substring$ }
  992.         { key #3 text.prefix$ }
  993.       if$
  994.     }
  995.     { author format.lab.names }
  996.   if$
  997. }
  998.  
  999. FUNCTION {author.editor.key.label}
  1000. { author empty$
  1001.     { editor empty$
  1002.         { key empty$
  1003.             { cite$ #1 #3 substring$ }
  1004.             { key #3 text.prefix$ }
  1005.           if$
  1006.         }
  1007.         { editor format.lab.names }
  1008.       if$
  1009.     }
  1010.     { author format.lab.names }
  1011.   if$
  1012. }
  1013.  
  1014. FUNCTION {author.key.organization.label}
  1015. { author empty$
  1016.     { key empty$
  1017.         { organization empty$
  1018.             { cite$ #1 #3 substring$ }
  1019.             { "The " #4 organization chop.word #3 text.prefix$ }
  1020.           if$
  1021.         }
  1022.         { key #3 text.prefix$ }
  1023.       if$
  1024.     }
  1025.     { author format.lab.names }
  1026.   if$
  1027. }
  1028.  
  1029. FUNCTION {editor.key.organization.label}
  1030. { editor empty$
  1031.     { key empty$
  1032.         { organization empty$
  1033.             { cite$ #1 #3 substring$ }
  1034.             { "The " #4 organization chop.word #3 text.prefix$ }
  1035.           if$
  1036.         }
  1037.         { key #3 text.prefix$ }
  1038.       if$
  1039.     }
  1040.     { editor format.lab.names }
  1041.   if$
  1042. }
  1043.  
  1044. FUNCTION {calc.short.authors}
  1045. { type$ "book" =
  1046.   type$ "inbook" =
  1047.   or
  1048.     'author.editor.key.label
  1049.     { type$ "proceedings" =
  1050.         'editor.key.organization.label
  1051.         { type$ "manual" =
  1052.             'author.key.organization.label
  1053.             'author.key.label
  1054.           if$
  1055.         }
  1056.       if$
  1057.     }
  1058.   if$
  1059.   'short.list :=
  1060. }
  1061.  
  1062. FUNCTION {calc.label}
  1063. { calc.short.authors
  1064.   short.list
  1065.   "("
  1066.   *
  1067.   year duplicate$ empty$
  1068.      { pop$ "????" }
  1069.      'skip$
  1070.   if$
  1071.   *
  1072.   'label :=
  1073. }
  1074.  
  1075. FUNCTION {sort.format.names}
  1076. { 's :=
  1077.   #1 'nameptr :=
  1078.   ""
  1079.   s num.names$ 'numnames :=
  1080.   numnames 'namesleft :=
  1081.     { namesleft #0 > }
  1082.     { nameptr #1 >
  1083.         { "   " * }
  1084.         'skip$
  1085.       if$
  1086.       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
  1087.       nameptr numnames = t "others" = and
  1088.         { "et al" * }
  1089.         { t sortify * }
  1090.       if$
  1091.       nameptr #1 + 'nameptr :=
  1092.       namesleft #1 - 'namesleft :=
  1093.     }
  1094.   while$
  1095. }
  1096.  
  1097. FUNCTION {sort.format.title}
  1098. { 't :=
  1099.   "A " #2
  1100.     "An " #3
  1101.       "The " #4 t chop.word
  1102.     chop.word
  1103.   chop.word
  1104.   sortify
  1105.   #1 global.max$ substring$
  1106. }
  1107.  
  1108. FUNCTION {author.sort}
  1109. { author empty$
  1110.     { key empty$
  1111.         { "to sort, need author or key in " cite$ * warning$
  1112.           ""
  1113.         }
  1114.         { key sortify }
  1115.       if$
  1116.     }
  1117.     { author sort.format.names }
  1118.   if$
  1119. }
  1120.  
  1121. FUNCTION {author.editor.sort}
  1122. { author empty$
  1123.     { editor empty$
  1124.         { key empty$
  1125.             { "to sort, need author, editor, or key in " cite$ * warning$
  1126.               ""
  1127.             }
  1128.             { key sortify }
  1129.           if$
  1130.         }
  1131.         { editor sort.format.names }
  1132.       if$
  1133.     }
  1134.     { author sort.format.names }
  1135.   if$
  1136. }
  1137.  
  1138. FUNCTION {author.organization.sort}
  1139. { author empty$
  1140.     { organization empty$
  1141.         { key empty$
  1142.             { "to sort, need author, organization, or key in " cite$ * warning$
  1143.               ""
  1144.             }
  1145.             { key sortify }
  1146.           if$
  1147.         }
  1148.         { "The " #4 organization chop.word sortify }
  1149.       if$
  1150.     }
  1151.     { author sort.format.names }
  1152.   if$
  1153. }
  1154.  
  1155. FUNCTION {editor.organization.sort}
  1156. { editor empty$
  1157.     { organization empty$
  1158.         { key empty$
  1159.             { "to sort, need editor, organization, or key in " cite$ * warning$
  1160.               ""
  1161.             }
  1162.             { key sortify }
  1163.           if$
  1164.         }
  1165.         { "The " #4 organization chop.word sortify }
  1166.       if$
  1167.     }
  1168.     { editor sort.format.names }
  1169.   if$
  1170. }
  1171.  
  1172. INTEGERS { seq.num }
  1173.  
  1174. FUNCTION {init.seq}
  1175. { #0 'seq.num :=}
  1176.  
  1177. EXECUTE {init.seq}
  1178.  
  1179. FUNCTION {int.to.fix}
  1180. { int.to.str$ 's :=
  1181.   #10 s text.length$ - 'len :=
  1182.    { len #0 > }
  1183.    { "0" s * 's :=
  1184.      len #1 - 'len := }
  1185.    while$
  1186.   s
  1187. }
  1188.  
  1189. FUNCTION {presort}
  1190. { calc.label
  1191.   type$ "book" =
  1192.   type$ "inbook" =
  1193.   or
  1194.     'author.editor.sort
  1195.     { type$ "proceedings" =
  1196.         'editor.organization.sort
  1197.         { type$ "manual" =
  1198.             'author.organization.sort
  1199.             'author.sort
  1200.           if$
  1201.         }
  1202.       if$
  1203.     }
  1204.   if$
  1205.   "    "
  1206.   *
  1207.   year field.or.null sortify
  1208.   *
  1209.   #1 entry.max$ substring$
  1210.   'sort.label :=
  1211.   sort.label
  1212.   "    "
  1213.   *
  1214.   title field.or.null
  1215.   sort.format.title
  1216.   *
  1217.   #1 entry.max$ substring$
  1218.   'sort.key$ :=
  1219.   seq.num #1 + 'seq.num :=
  1220.   seq.num  int.to.fix 'seq.label :=
  1221. }
  1222.  
  1223. ITERATE {presort}
  1224.  
  1225. SORT
  1226.  
  1227. STRINGS { longest.label last.sort.label next.extra }
  1228.  
  1229. INTEGERS { longest.label.width last.extra.num number.label }
  1230.  
  1231. FUNCTION {initialize.longest.label}
  1232. { "" 'longest.label :=
  1233.   #0 int.to.chr$ 'last.sort.label :=
  1234.   "" 'next.extra :=
  1235.   #0 'longest.label.width :=
  1236.   #0 'last.extra.num :=
  1237.   #0 'number.label :=
  1238. }
  1239.  
  1240. FUNCTION {forward.pass}
  1241. { last.sort.label sort.label =
  1242.     { last.extra.num #1 + 'last.extra.num :=
  1243.       last.extra.num int.to.chr$ 'extra.label :=
  1244.     }
  1245.     { "a" chr.to.int$ 'last.extra.num :=
  1246.       "" 'extra.label :=
  1247.       sort.label 'last.sort.label :=
  1248.     }
  1249.   if$
  1250. }
  1251.  
  1252. FUNCTION {reverse.pass}
  1253. { next.extra "b" =
  1254.     { "a" 'extra.label := }
  1255.     'skip$
  1256.   if$
  1257.   label extra.label * 'label :=
  1258.   number.label #1 + 'number.label :=
  1259.   number.label int.to.str$ width$ longest.label.width >
  1260.     { number.label int.to.str$ 'longest.label :=
  1261.       number.label int.to.str$ width$ 'longest.label.width :=
  1262.     }
  1263.     'skip$
  1264.   if$
  1265.   extra.label 'next.extra :=
  1266. }
  1267.  
  1268. EXECUTE {initialize.longest.label}
  1269.  
  1270. ITERATE {forward.pass}
  1271.  
  1272. REVERSE {reverse.pass}
  1273.  
  1274. FUNCTION {unsort}
  1275. { seq.label 'sort.key$ := }
  1276.  
  1277. ITERATE {unsort}
  1278.  
  1279. SORT
  1280.  
  1281. FUNCTION {begin.bib}
  1282. {   preamble$ empty$
  1283.     'skip$
  1284.     { preamble$ write$ newline$ }
  1285.   if$
  1286.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  1287. }
  1288.  
  1289. EXECUTE {begin.bib}
  1290.  
  1291. EXECUTE {init.state.consts}
  1292.  
  1293. ITERATE {call.type$}
  1294.  
  1295. FUNCTION {end.bib}
  1296. { newline$
  1297.   "\end{thebibliography}" write$ newline$
  1298. }
  1299.  
  1300. EXECUTE {end.bib}
  1301. %% End of customized bst file 
  1302.